# Copyright 2016, 2017, 2018 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)

language: cpp

os: linux
dist: xenial

branches:
  only:
    - master
    - develop
    - /feature\/.*/

env:
  matrix:
    - BOGUS_JOB=true

matrix:

  exclude:
    - env: BOGUS_JOB=true

  include:
    - os: linux
      compiler: g++-4.7
      env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=11
      addons:
        apt:
          packages:
            - g++-4.7
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-4.8
      env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=11
      addons:
        apt:
          packages:
            - g++-4.8
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-4.9
      env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=11
      addons:
        apt:
          packages:
            - g++-4.9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-5
      env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - g++-5
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-6
      env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - g++-6
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-7
      env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - g++-7
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-8
      env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - g++-8
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-9
      env: TOOLSET=gcc COMPILER=g++-9 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - g++-9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      dist: bionic
      compiler: g++-10
      env: TOOLSET=gcc COMPILER=g++-10 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - g++-10
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++
      env: NVCC=1
      before_script:
        - wget https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.85_387.26_linux
        - sh cuda_9.1.85_387.26_linux --silent --toolkit --override --toolkitpath=$HOME/lib/cuda-9.1.85
      script:
        - $HOME/lib/cuda-9.1.85/bin/nvcc -x cu -I . -c -std=c++11 libs/mp11/test/mp11.cpp

    - os: linux
      dist: trusty
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=11
      addons:
        apt:
          packages:
            - clang-3.3

    - os: linux
      dist: trusty
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=11
      addons:
        apt:
          packages:
            - clang-3.4

    - os: linux
      compiler: clang++-3.5
      env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-3.5
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.6
      env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-3.6
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.7
      env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-3.7
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.8
      env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-3.8
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-3.9
      env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-3.9
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: clang++-4.0
      env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-4.0
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      dist: bionic
      compiler: clang++-5.0
      env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - clang-5.0
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      dist: bionic
      compiler: clang++-6.0
      env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=11,14,17
      addons:
        apt:
          packages:
            - clang-6.0
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      dist: bionic
      compiler: clang++-7
      env: TOOLSET=clang COMPILER=clang++-7 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-7
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-bionic-7

    - os: linux
      dist: bionic
      compiler: clang++-8
      env: TOOLSET=clang COMPILER=clang++-8 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-8
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-bionic-8

    - os: linux
      dist: bionic
      compiler: clang++-9
      env: TOOLSET=clang COMPILER=clang++-9 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-9
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      dist: bionic
      compiler: clang++-10
      env: TOOLSET=clang COMPILER=clang++-10 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-10
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      dist: bionic
      compiler: clang++-11
      env: TOOLSET=clang COMPILER=clang++-11 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-11
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      dist: bionic
      compiler: clang++-12
      env: TOOLSET=clang COMPILER=clang++-12 CXXSTD=11,14,17,2a
      addons:
        apt:
          packages:
            - clang-12
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/bionic/ llvm-toolchain-bionic-12 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      compiler: clang++-libc++
      env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=11,14,1z
      addons:
        apt:
          packages:
            - libc++-dev

    - os: linux
      dist: bionic
      compiler: clang++-5.0
      env: CLANG_X_CUDA=1
      addons:
        apt:
          packages:
            - clang-5.0
            - nvidia-profiler
            - nvidia-cuda-dev
            - nvidia-cuda-toolkit
          sources:
            - ubuntu-toolchain-r-test
      script:
        - clang++-5.0 -I . -c -x cuda -nocudainc -nocudalib --cuda-gpu-arch=sm_30 -D__device__="__attribute__((device))" -std=c++11 libs/mp11/test/mp11.cpp
        - clang++-5.0 -I . -c -x cuda -nocudainc -nocudalib --cuda-gpu-arch=sm_30 -D__device__="__attribute__((device))" -std=c++14 libs/mp11/test/mp11.cpp
        - clang++-5.0 -I . -c -x cuda -nocudainc -nocudalib --cuda-gpu-arch=sm_30 -D__device__="__attribute__((device))" -std=c++1z libs/mp11/test/mp11.cpp

    - os: osx
      osx_image: xcode7.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: osx
      osx_image: xcode8.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: osx
      osx_image: xcode9.4
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: osx
      osx_image: xcode10.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: osx
      osx_image: xcode11.6
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: osx
      osx_image: xcode12.2
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z

    - os: linux
      compiler: clang++
      env: CMAKE_STANDALONE_TEST=1
      install: true
      script:
      - mkdir __build__ && cd __build__
      - cmake ..
      - cmake --build . --target tests
      - ctest --output-on-failure

    - os: linux
      compiler: clang++
      env: CMAKE_SUBDIR_TEST=1
      install: true
      script:
      - cd test/cmake_subdir_test && mkdir __build__ && cd __build__
      - cmake ..
      - cmake --build .
      - cmake --build . --target check

    - os: linux
      compiler: clang++
      env: CMAKE_INSTALL_TEST=1
      install: true
      script:
      - mkdir __build__ && cd __build__
      - cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
      - cmake --build . --target install
      - cd ../test/cmake_install_test && mkdir __build__ && cd __build__
      - cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
      - cmake --build .
      - cmake --build . --target check

    - os: linux
      compiler: clang++
      env: BOOST_CMAKE_TEST=1
      script:
        - mkdir __build__ && cd __build__
        - cmake -DBUILD_TESTING=ON -DBOOST_INCLUDE_LIBRARIES=mp11 ..
        - cmake --build . --target tests
        - ctest --output-on-failure

install:
  - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
  - cd ..
  - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
  - cd boost-root
  - git submodule update --init tools/boostdep
  - mkdir -p libs/mp11
  - cp -r $TRAVIS_BUILD_DIR/* libs/mp11
  - python tools/boostdep/depinst/depinst.py mp11
  - ./bootstrap.sh
  - ./b2 headers

script:
  - |-
    echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
  - ./b2 -j3 libs/mp11/test toolset=$TOOLSET cxxstd=$CXXSTD ${CXXFLAGS:+cxxflags="$CXXFLAGS"}

notifications:
  email:
    on_success: always
